/*
 * v1.1 by tonydon site:txdnet.cn
 * netbeansIDE 7.1
 */
package cn.txdnet.txcms.admin.action;

import cn.txdnet.txcms.domain.Manager;
import cn.txdnet.txcms.domain.Mgrole;
import cn.txdnet.txcms.service.AdminService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import cn.txdnet.txweb.model.ModelUtil;
import cn.txdnet.txweb.model.ModelView;
import cn.txdnet.txweb.utils.BeanUtil;
import cn.txdnet.txweb.utils.Message;
import cn.txdnet.txweb.utils.SessionUtil;
import cn.txdnet.txweb.utils.WebUtil;

/**
 *
 * @author txdnet
 */
public class AdminAction {

    /*
     * 输出登陆信息
     */
    public ModelView out_name(HttpServletRequest req){
        Manager mgr = SessionUtil.getManager(req);
        return ModelUtil.getTextModel(mgr.getMgrname());
    }
    
    /*
     * 管理员退出注销会话
     */
     public void sign_out(HttpServletRequest req){
         SessionUtil.removeManager(req);
     }
     
     /*
      * 管理员修改登录密码
      */
     public ModelView reset_key(HttpServletRequest req){
         String orgkey = WebUtil.getNoNull(req, "orgkey", null);
         String newkey = WebUtil.getNoNull(req, "newkey", null);
         if(orgkey==null || newkey==null){
             return ModelUtil.getTextModel(Message.MSG_FIELD_ERR);
         }
         Manager mgr = SessionUtil.getManager(req);
         if(!orgkey.equals(mgr.getMgrkey())){
             return ModelUtil.getTextModel(Message.MSG_VALID_ERR);
         }
         
         Map m = new HashMap(2);
         m.put("mgrid", mgr.getMgrid());
         m.put("mgrkey", newkey);
         
         if(AdminService.upateBase(m)){
             //修改密码成功后 移除管理员会话
             SessionUtil.removeManager(req);
             return ModelUtil.getTextModel(Message.MSG_SUCCESS);
         }else{
             return ModelUtil.getTextModel(Message.MSG_FAIL);
         }
     }
     
     /*
      * 输出管理员信息
      */
     public ModelView out_info(HttpServletRequest req)throws Exception{
         Manager m = SessionUtil.getManager(req);
         // 重新赋值，去除密码
         Manager out_mgr = new Manager();
         BeanUtil.copyProperties(out_mgr, m);
         out_mgr.setMgrkey(null);
         return ModelUtil.getJsonModel(out_mgr);
     }
     
//     检查是否有重复账户
     public ModelView is_repeat_name(HttpServletRequest req){
          String mgrname = WebUtil.getNick(req, "mgrname", null);
          if(mgrname==null){
              return ModelUtil.getTextModel(Message.MSG_FIELD_ERR);
          }
          return ModelUtil.getTextModel(AdminService.isRepeatMgrname(mgrname));
     }

//     建立管理员
     public ModelView make_mgr(HttpServletRequest req)throws Exception{
         Manager m = BeanUtil.parseRequestToBean(Manager.class, req);
         if(AdminService.makeAdmin(m)){
               return ModelUtil.getTextModel(Message.MSG_SUCCESS);
         }else{
               return ModelUtil.getTextModel(Message.MSG_FAIL);
         }
     }
     
//     管理员列表
     public ModelView list_factor(HttpServletRequest req){
         int rownum = WebUtil.getInt(req, "rownum", 0);
         int crow = WebUtil.getInt(req, "crow", 0);
         int roleid = WebUtil.getInt(req, "roleid", -1);
         
         Map<String, Object> m = new HashMap<String,Object>();
            m.put("crow", crow);
         if(roleid>0){
            m.put("roleid", roleid);
         }
         
         if(rownum==0){
            rownum = AdminService.countByFactor(m);
         }
         
         List ls = AdminService.listByFactor(m);
         Map<String,Object> model = new HashMap<String,Object>();
	   model.put("list", ls);
	   model.put("rownum", rownum);
         return ModelUtil.getJsonModel(model);
     }
     
//     删除管理员
     public  ModelView delete_mgr(HttpServletRequest req){
         int mgrid = WebUtil.getInt(req, "mgrid", -1);
         
         // mgrid=1 是超级管理员 禁止被任何管理员删除
         if(mgrid<=1){
             return ModelUtil.getTextModel(Message.MSG_PARAM_ERR);
         }
         
         // 删除操作只能有超级管理员执行
         Manager m = SessionUtil.getManager(req);
         if(m.getMgrid()>1){
             return ModelUtil.getTextModel(Message.MSG_VALID_ERR);
         }
         
         if(AdminService.deleteAdmin(mgrid)){
             return ModelUtil.getTextModel(Message.MSG_SUCCESS);
         }else{
             return ModelUtil.getTextModel(Message.MSG_FAIL);
         }
         
     }
     
//     更新管理员角色
     public  ModelView reset_mgr_role(HttpServletRequest req){
         int mgrid = WebUtil.getInt(req, "mgrid",-1);
         int roleid = WebUtil.getInt(req, "roleid", -1);
         
         // 可以付给其他管理员超级管理员角色
         if(roleid<1){
             return ModelUtil.getTextModel(Message.MSG_PARAM_ERR);
         }  
         
         // mgrid=1 是超级管理员 禁止被任何管理员修改
         if(mgrid<=1){
             return ModelUtil.getTextModel(Message.MSG_PARAM_ERR);
         }
         
         // 这里只能是超级管理员才能更新其他账户的角色
         Manager m = SessionUtil.getManager(req);
         if(m.getRoleid()>1){
             return ModelUtil.getTextModel(Message.MSG_VALID_ERR);
         }
         
         Map param = new HashMap();
             param.put("mgrid", mgrid);
             param.put("roleid", roleid);
         
         if(AdminService.upateBase(param)){
             return ModelUtil.getTextModel(Message.MSG_SUCCESS);
         }else{
             return ModelUtil.getTextModel(Message.MSG_FAIL);
         }
         
     }
     
//     修改其他管理员密码
    public  ModelView reset_mgr_key(HttpServletRequest req){
         int mgrid = WebUtil.getInt(req, "mgrid", -1);
         String mgrkey = WebUtil.getNoNull(req, "mgrkey", null);
         
         // mgrid=1 是超级管理员 禁止被任何管理员修改
         if(mgrid<=1){
             return ModelUtil.getTextModel(Message.MSG_PARAM_ERR);
         }
         
         // 修改密码操作只能有超级管理员执行
         Manager m = SessionUtil.getManager(req);
         if(m.getMgrid()>1){
             return ModelUtil.getTextModel(Message.MSG_VALID_ERR);
         }
         
         Map param = new HashMap();
             param.put("mgrid", mgrid);
             param.put("mgrkey", mgrkey);
         
         if(AdminService.upateBase(param)){
             return ModelUtil.getTextModel(Message.MSG_SUCCESS);
         }else{
             return ModelUtil.getTextModel(Message.MSG_FAIL);
         }
         
     }
    
//    列出管理员指派的信息类别
    public ModelView query_mgr_cids(HttpServletRequest req){
        int mgrid = WebUtil.getInt(req, "mgrid", -1);
         // mgrid=1 是超级管理员 禁止被任何管理员修改
         if(mgrid<=1){
             return ModelUtil.getTextModel(Message.MSG_PARAM_ERR);
         }
         
         // 这里因cids字段默认是0 故不可能返回null 无需判断，可直接返回到前端
         return ModelUtil.getTextModel(AdminService.queryCids(mgrid)); 
    }
    
//    更新管理员信息类别指派
      public  ModelView update_mgr_cids(HttpServletRequest req){
         int mgrid = WebUtil.getInt(req, "mgrid", -1);
         String cids = WebUtil.getNoNull(req, "cids", null);
         
         // mgrid=1 是超级管理员 禁止被任何管理员修改
         if(mgrid<=1){
             return ModelUtil.getTextModel(Message.MSG_PARAM_ERR);
         }
         
         // 修改操作只能有超级管理员执行
         Manager m = SessionUtil.getManager(req);
         if(m.getMgrid()>1){
             return ModelUtil.getTextModel(Message.MSG_VALID_ERR);
         }
         
         Map param = new HashMap();
             param.put("mgrid", mgrid);
             param.put("cids", cids);
         
         if(AdminService.upateBase(param)){
             return ModelUtil.getTextModel(Message.MSG_SUCCESS);
         }else{
             return ModelUtil.getTextModel(Message.MSG_FAIL);
         }
         
     }

    
// 管理员角色操作开始------------------------
//     管理员角色列表
     public ModelView list_role(){
         Map model = new HashMap();
             model.put("list", AdminService.listRole());
         return ModelUtil.getJsonModel(model);
     }
     
//     列出角色基本信息用于select选框
     public ModelView list_role_base(){
         return ModelUtil.getJsonModel(AdminService.listRoleBase());
     }
     
//     查询角色详情
     public ModelView query_role(HttpServletRequest req){
         int roleid = WebUtil.getInt(req, "roleid", -1);
         if(roleid<0){
             return ModelUtil.getTextModel(Message.MSG_PARAM_ERR);
         }
         return ModelUtil.getJsonModel(AdminService.queryRole(roleid));
     }
     
//     删除角色
     public ModelView delete_role(HttpServletRequest req){
         int roleid = WebUtil.getInt(req, "roleid", -1);
         if(roleid<=1){
             return ModelUtil.getTextModel(Message.MSG_PARAM_ERR);
         }
         if(AdminService.deleteRole(roleid)){
             return ModelUtil.getTextModel(Message.MSG_SUCCESS);
         }else{
             return ModelUtil.getTextModel(Message.MSG_FAIL);
         }
     }
     
//     建立角色
     public ModelView make_role(HttpServletRequest req)throws Exception{
         Mgrole r = BeanUtil.parseRequestToBean(Mgrole.class, req);
         if(AdminService.makeRole(r)){
             return ModelUtil.getTextModel(Message.MSG_SUCCESS);
         }else{
             return ModelUtil.getTextModel(Message.MSG_FAIL);
         }
                
     }
     
//     编辑角色
     public ModelView update_role(HttpServletRequest req)throws Exception{
         int roleid = WebUtil.getInt(req, "roleid", -1);
         if(roleid<=1){
             return ModelUtil.getTextModel(Message.MSG_PARAM_ERR);
         }
          Mgrole r = BeanUtil.parseRequestToBean(Mgrole.class, req);
         if(AdminService.updateRole(r)){
             return ModelUtil.getTextModel(Message.MSG_SUCCESS);
         }else{
             return ModelUtil.getTextModel(Message.MSG_FAIL);
         }
     }
     
//     查询角色数
     public ModelView count_role(){
         return ModelUtil.getTextModel(AdminService.countRole());
     }
}
